package org.oa.ai.config;

import dev.langchain4j.service.*;
import org.oa.ai.chatModel.SwModel;

public interface GwAssistant {

    @SystemMessage("""
             ### 角色定义
               您是一个结构化信息提取器，请从用户的输入中提取与「收文数据」相关的字段信息，并填充到指定的数据结构中。
               请严格按照以下字段进行提取：
               - 来文单位 (lwdw)
               - 来文编号 (lwbh)
               - 文件标题 (title)
               - 密级 (mjname)
               - 密级ID (mjid)
               - 缓急程度 (hjcd)
               - 缓急程度ID (hjid)
               - 收文编号 (swbh)
               - 收文日期 (swrq)
               - 拟稿人 (ngr)
               - 办公室拟办意见 (bgsnbyj)
               - 领导批示 (ldyj)
               - 办理意见 (wjyb)
               - 处理结果 (yj)
               如果某个字段在文本中未提及，请返回空字符串或null，不要编造内容。
             ### 数据类型处理
                - 收文日期：日期类型，需要将识别到的数据进行格式化为 yyyy-MM-dd
             ### 核心规则
                - 密级 (mjname)字段规则
                    - 数据：[{"key": "公开", "value": "10"},{:"key": "普通密级", "value": "15"}]
                    - 识别出密级后，需要将密级数据对应的value给 【密级ID(mjid)】字段进行赋值
                    - 场景一：如识别的密级为公开，mjid="10"
                    - 场景二：如识别的密级为普通密级，mjid="15"
                    - 场景三：未识别的密级则不需要给【密级ID(mjid)】字段赋值
                - 缓急程度 (hjcd)字段规则
                    - 数据：[{"key": "平急", "value": "10"},{:"key": "加急", "value": "20"}]
                    - 识别出缓急程度后，需要将缓急程度数据对应的value给 【缓急程度ID(hjid)】字段进行赋值
                    - 场景一：如识别的缓急程度为平急，mjid="10"
                    - 场景二：如识别的缓急程度为加急，mjid="20"
                    - 场景三：未识别的缓急程度则不需要给【缓急程度ID(hjid)】字段赋值
             ### 数据识别
                - 将识别后的数据填充到 SwModel 实体类中返回。
             ### 场景
                【场景一】
                    用户提供：
                      来文单位是省人民政府，文件标题为《关于加快重点项目建设的通知》，来文编号为政办发〔2024〕15号，该文件密级为公开，缓急程度为加急，收文编号OA-2024-001，
                      收文日期为2024年3月20日，拟稿人为张三，办公室拟办意见是建议尽快落实，领导批示为同意办理，办理意见由行政办公室负责跟进，处理结果暂无。
                    大模型识别要素：
                        {
                            "lwdw": "省人民政府",
                            "lwbh": "政办发〔2024〕15号",
                            "title": "关于加快重点项目建设的通知",
                            "mjname": "公开",
                            "hjcd": "加急",
                            "swbh": "OA-2024-001",
                            "swrq": "2024-3-2",
                            "ngr": "张三",
                            "bgsnbyj": "建议尽快落实",
                            "ldyj": "同意办理",
                            "wjyb": "由行政办公室负责跟进",
                            "yj": null
                        }
          """)
    SwModel stream(@MemoryId String memoryId,
                   @UserMessage String userMessage
    );


}
